package pl.peterjack.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.jdo.PersistenceManager;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.impl.LogFactoryImpl;

import pl.peterjack.SystemTools;
import pl.peterjack.model.PMF;
import pl.peterjack.model.Stale;
import pl.peterjack.model.dane.Firma;
import pl.peterjack.model.dane.Klient;
import pl.peterjack.model.dane.Pracownik;
import pl.peterjack.model.dane.PracownikUprawnienia;
import pl.peterjack.model.dane.Produkt;
import pl.peterjack.model.jdo.KlientJDO;

public class Main extends HttpServlet {

	Log log = new LogFactoryImpl().getInstance(Main.class);

	protected void processRequest(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		PersistenceManager pm = PMF.get().getPersistenceManager();
		Pracownik pracownik = (Pracownik) request.getSession().getAttribute("firma_pracownik");
		
		request.setAttribute("firma_klient", request.getSession().getAttribute("firma_klient")); 
		request.setAttribute(Stale.ATRYBUT_KLIENT, request.getSession()
				.getAttribute("firma_klient"));
		request.setAttribute("firma_pracownik", pracownik);
		
		request.setAttribute(Stale.ATRYBUT_KLIENCI_LISTA, new ArrayList());
		request.setAttribute(Stale.ATRYBUT_PRODUKT_LISTA, new ArrayList());
		request.setAttribute(Stale.ATRYBUT_UPRAWNIENIA_LISTA, new ArrayList());
		
		Firma firma = (Firma) request.getSession().getAttribute("firma");
		request.setAttribute(Stale.ATRYBUT_FIRMA, firma);
		
		if (firma == null) {
			request.getSession().invalidate();
			response.setContentType("text/plain");
			response.setStatus(response.SC_MOVED_TEMPORARILY);
			response.setHeader("Location", "/");
			return; 
		}
		
		
		if (pracownik != null) {
			PracownikUprawnienia pracownikUprawnienie = null; 
			if (pracownik.getPracownikUprawnienia() != null && pracownik.getPracownikUprawnienia().longValue() > 0 ) {
				pracownikUprawnienie = pm.getObjectById(PracownikUprawnienia.class, pracownik.getPracownikUprawnienia());
			}
			request.setAttribute("firma_pracownik_uprawnienie", pracownikUprawnienie);
		}
		
		try {
			ServletFileUpload upload = new ServletFileUpload();
			FileItemIterator iter = upload.getItemIterator(request);
			iter.next(); // pierwsze to max file ...
			FileItemStream fileItem = iter.next();
			InputStream is = fileItem.openStream();
			String zawartosc = SystemTools.convertStreamToString(is);
			request.setAttribute(Stale.ATRYBUT_ZAWARTOSC_CSV,
					SystemTools.nullToEmptyString(zawartosc));
		} catch (Exception e) {
			// spodziewamy sie tych bledow jak nie zostanie wyslany formularz 
			request.setAttribute(Stale.ATRYBUT_ZAWARTOSC_CSV, "");
		}
		
		
		try {
			List<Klient> klienci = KlientJDO.getKlienciFirmy(firma);
			request.setAttribute(Stale.ATRYBUT_KLIENCI_LISTA, klienci);
			List<Produkt> produkty = SystemTools.produktyFirmy(firma); 
			request.setAttribute(Stale.ATRYBUT_PRODUKT_LISTA, produkty);
			List<PracownikUprawnienia> pracownikUprawnienie = SystemTools.uprawnieniaFirmy(firma); 
			request.setAttribute(Stale.ATRYBUT_UPRAWNIENIA_LISTA, pracownikUprawnienie);
		} catch (Exception e) {
			e.printStackTrace(); 
		}

		try {
			RequestDispatcher r = request.getRequestDispatcher("WEB-INF/panel.jsp");
			request.setAttribute("nazwa_firmy", firma.getNazwa());
			r.forward(request, response);

		} catch (Exception e) {
			e.printStackTrace();
		}

		
	}

	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	/**
	 * Handles the HTTP <code>POST</code> method.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 *             if a servlet-specific error occurs
	 * @throws IOException
	 *             if an I/O error occurs
	 */
	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

}
